package com.zhongge.stack;

import java.util.Arrays;

/**
 * @ClassName MyStack
 * @Description TODO 自主实现栈
 * @Author 笨忠
 * @Date 2025/8/23 8:34
 * @Version 1.0
 */
public class MyStack {
    //数组实现栈
    private int[] elem;

    //需要一个指针usedSize始终实现数组有效元素的最后一个
    private int usedSize;

    //构造方法
    public MyStack() {
        this.elem = new int[5];
    }

    //常用方法

    //入栈
    public void push(int value) {
        //1.判满扩容
        if (isFull()) {//判满
            //扩容
            this.elem = Arrays.copyOf(elem, elem.length * 20);
        }

        //2.放入元素
        this.elem[usedSize] = value;
        usedSize++;
    }

    private boolean isFull() {
        return usedSize == elem.length;
    }

    //出栈
    public int pop() {
        //1.判满
        if (isEmpty()) {
            return -1;//返回-1代表元素为空
        }
        //2.出栈
        //2.1 usedSize--
        this.usedSize--;
        //2.2返回
        return this.elem[usedSize];

        //合成一步:return elem[--usedSize];
    }

    public boolean isEmpty() {
        return usedSize == 0;
    }

    //获取栈顶元素
    public int peek() {
        //1.判空
        if(isEmpty()) {
            return -1;
        }
        //2.返回usedSize-1处的值
        return this.elem[this.usedSize - 1];
    }

    //求栈中的元素
    public int size() {
        return this.usedSize;
    }
}
